package com.divemotor.ventarepuestosinternet.model;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;



@Entity
@Table(name="SIS_MAE_OPCION")
public class Opcion implements Serializable {
	
	@Id
	@Column(name="COD_ID_OPCION")
	private Integer idOpcion;
	@Column(name="DES_NOMBRE" ,length=50)
	private String nombre;
	@Column(name="txt_URL", length=50)
	private String url;
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="COD_ID_SISTEMA")
	private Sistema sistema;
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="COD_ID_OPCION_PADRE")
	private Opcion opcionPadre;
	@Column(length=1, name="IND_ES_PADRE")
	private String esPadre;
	@ManyToMany(cascade = CascadeType.ALL, mappedBy = "listaOpciones", fetch=FetchType.LAZY)
	private List<Perfil> listaPerfiles;

	
	public Opcion() {
	}
	
	public Opcion(Integer idOpcion,Opcion opcionPadre,Sistema sistema, String nombre, String url, String esPadre) {
		this.idOpcion = idOpcion;
		this.nombre = nombre;
		this.url = url;
		this.sistema = sistema;
		this.opcionPadre = opcionPadre;
		this.esPadre = esPadre;
	}
	
	public Opcion(Integer idOpcion){
		this.idOpcion=idOpcion;
	}
	
	private static final long serialVersionUID = 1L;

	public Integer getIdOpcion() {
		return idOpcion;
	}
	
	public void setIdOpcion(Integer idOpcion) {
		this.idOpcion = idOpcion;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}

	public Sistema getSistema() {
		return sistema;
	}

	public void setSistema(Sistema sistema) {
		this.sistema = sistema;
	}

	public Opcion getOpcionPadre() {
		return opcionPadre;
	}

	public void setOpcionPadre(Opcion opcionPadre) {
		this.opcionPadre = opcionPadre;
	}

	public String getEsPadre() {
		return esPadre;
	}

	public void setEsPadre(String esPadre) {
		this.esPadre = esPadre;
	}

	public List<Perfil> getListaPerfiles() {
		return listaPerfiles;
	}

	public void setListaPerfiles(List<Perfil> listaPerfiles) {
		this.listaPerfiles = listaPerfiles;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((idOpcion == null) ? 0 : idOpcion.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj){
			return true;
		}
		if (obj == null){
			return false;
		}
		if (getClass() != obj.getClass()){
			return false;
		}
		Opcion other = (Opcion) obj;
		if (idOpcion == null) {
			if (other.idOpcion != null){
				return false;
			}
		} else if (!idOpcion.equals(other.idOpcion)){
			return false;
		}
		return true;
	}
	
	
	
}